package com.simon.samples.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.TabBar;
import com.google.gwt.user.datepicker.client.DatePicker;
import com.google.gwt.user.client.ui.DisclosurePanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.HorizontalSplitPanel;
import com.simon.samples.shared.IncorrectUserOrPassword;
import com.simon.samples.shared.SessionID;
import com.simon.samples.shared.YaExiste;
import com.simon.samples.shared.world.Departamento;
import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.DecoratedStackPanel;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.FlexTable;

public class Login implements EntryPoint {
	private LoginServiceAsync loginService = GWT.create(LoginService.class);
	
	Label lblMensaje;
	private TabLayoutPanel mainTabPanel;
	private VerticalPanel vpDepartamentos;
	private TabLayoutPanel tabLayoutPanel;
	private VerticalPanel tabNuevoDepartamento;
	private VerticalPanel tabBuscarDepartamento;
	private HorizontalPanel horizontalPanel;
	private Label lblNombreDepartamento;
	private TextBox textCrearDepartamento;
	private Button btnCrearDepartamento;
	private HorizontalPanel horizontalPanel_2;
	private HorizontalPanel horizontalPanel_1;
	private Label lblMensajeBuscarDepto;
	private Button btnBuscar;
	private FlexTable ftResultadosDepto;
	private Label lblCodigo;
	private TextBox textBox;
	private Label lblNombreBuscarDepto;
	private TextBox tbNombreBuscarDepto;
	
	@Override
	public void onModuleLoad() {
		RootPanel rootPanel = RootPanel.get();

		mainTabPanel = new TabLayoutPanel(1.5, Unit.EM);
		
		vpDepartamentos = new VerticalPanel();
		mainTabPanel.add(vpDepartamentos, "Departametos", false);
		
		tabLayoutPanel = new TabLayoutPanel(1.5, Unit.EM);
		
		tabNuevoDepartamento = new VerticalPanel();
		tabLayoutPanel.add(tabNuevoDepartamento, "Nuevo", false);
		tabNuevoDepartamento.setSize("564px", "85px");
		
		horizontalPanel = new HorizontalPanel();
		tabNuevoDepartamento.add(horizontalPanel);
		horizontalPanel.setWidth("270px");
		
		lblNombreDepartamento = new Label("Nombre");
		horizontalPanel.add(lblNombreDepartamento);
		
		textCrearDepartamento = new TextBox();
		textCrearDepartamento.addKeyPressHandler(new KeyPressHandler() {
			public void onKeyPress(KeyPressEvent event) {
				if(event.getCharCode() == 13){
					crearDepartamento(textCrearDepartamento.getText());
				}
			}
		});
		horizontalPanel.add(textCrearDepartamento);
		
		btnCrearDepartamento = new Button("Crear");
		btnCrearDepartamento.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				crearDepartamento(textCrearDepartamento.getText());
			}
		});
		horizontalPanel.add(btnCrearDepartamento);
		
		lblMensaje = new Label("");
		tabNuevoDepartamento.add(lblMensaje);
		lblMensaje.setHeight("11px");
		
		tabBuscarDepartamento = new VerticalPanel();
		tabLayoutPanel.add(tabBuscarDepartamento, "Buscar", false);
		tabBuscarDepartamento.setWidth("410px");
		
		horizontalPanel_2 = new HorizontalPanel();
		tabBuscarDepartamento.add(horizontalPanel_2);
		horizontalPanel_2.setWidth("140px");
		
		lblCodigo = new Label("Código");
		horizontalPanel_2.add(lblCodigo);
		lblCodigo.setWidth("61px");
		
		textBox = new TextBox();
		horizontalPanel_2.add(textBox);
		textBox.setWidth("59px");
		
		horizontalPanel_1 = new HorizontalPanel();
		tabBuscarDepartamento.add(horizontalPanel_1);
		horizontalPanel_1.setWidth("270px");
		
		lblNombreBuscarDepto = new Label("Nombre");
		horizontalPanel_1.add(lblNombreBuscarDepto);
		
		tbNombreBuscarDepto = new TextBox();
		horizontalPanel_1.add(tbNombreBuscarDepto);
		
		lblMensajeBuscarDepto = new Label("");
		tabBuscarDepartamento.add(lblMensajeBuscarDepto);
		lblMensajeBuscarDepto.setHeight("11px");
		
		btnBuscar = new Button("Buscar");
		tabBuscarDepartamento.add(btnBuscar);
		
		ftResultadosDepto = new FlexTable();
		tabBuscarDepartamento.add(ftResultadosDepto);
		ftResultadosDepto.setWidth("392px");
		vpDepartamentos.add(tabLayoutPanel);
		tabLayoutPanel.setSize("735px", "409px");
		rootPanel.add(mainTabPanel, 10, 10);
		mainTabPanel.setSize("797px", "524px");
	}
	private void crearDepartamento(String nombreDepartamento) {
		if (loginService == null) {
			loginService = GWT.create(LoginService.class);
		}

		// Set up the callback object.
		AsyncCallback<Departamento> callback = new AsyncCallback<Departamento>() {
			public void onFailure(Throwable caught) {
				// If the stock code is in the list of delisted codes, display an error message.
		        String details = caught.getMessage();
		        if (caught instanceof YaExiste) {
		          details = caught.getMessage();
		        }

		        lblMensaje.setText("Error: "+details);
			}

			public void onSuccess(Departamento result) {
				lblMensaje.setText("Departamento "+result.getCodigo()+", "+result.getDescripcion()+" creado exitósamente");
			}
		};

		// Make the call to the stock price service.
		loginService.crearDepartamento(nombreDepartamento, callback);
	}
}
